home *** CD-ROM | disk | FTP | other *** search
- unit wave_main;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, StdCtrls, ExtCtrls;
-
- type
- Tmainscreen = class(TForm)
- Timer1: TTimer;
- Label1: TLabel;
- procedure Timer1Timer(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure FormHide(Sender: TObject);
- procedure FormShow(Sender: TObject);
- private
- { Private declarations }
- procedure saverout(var Msg:TMsg; var Handled:boolean);
- public
- { Public declarations }
- end;
-
- var
- mainscreen: Tmainscreen;
-
- implementation
-
- {$R *.DFM}
-
- uses
- smgrafd;
-
- const
- pp=4;
-
- var
- dc:hdc;
- crs:Tpoint;
- xmax,ymax:integer;
- desk:tbitmap;
- py:integer;
- lijn:tbitmap;
- dd:integer;
- cc:array[-8..1024] of integer;
- kk:array[0..255,-8..1024] of byte;
-
- procedure Tmainscreen.saverout(var Msg : TMsg; var Handled : boolean);
- var
- done : boolean;
- begin
- if Msg.message = WM_MOUSEMOVE then
- done := (Abs(LOWORD(Msg.lParam) - crs.x) > 5) or
- (Abs(HIWORD(Msg.lParam) - crs.y) > 5)
- else
- done := (Msg.message = WM_KEYDOWN) or (Msg.message = WM_ACTIVATE) or
- (Msg.message = WM_ACTIVATEAPP) or (Msg.message = WM_NCACTIVATE);
- if done then
- begin
- releasedc(0,dc);
- Close;
- end;
- end;
-
- procedure Tmainscreen.Timer1Timer(Sender: TObject);
-
- var
- ll,ld:prgbarray;
- x,x2,y,tt:integer;
-
- begin
- ll:=prgbarray(lijn.scanline[0]);
- y:=py;
- for tt:=-8 to ymax div pp+8 do
- begin
- if (y>-1) and (y<ymax) then
- begin
- ld:=prgbarray(desk.scanline[y]);
- for x:=0 to xmax -1 do
- begin
- x2:=x+cc[tt];
- if x<0 then inc(x2,xmax);
- if x2>=xmax then dec(x2,xmax);
- // ll[x]:=ld[x2];
- with ll[x] do
- begin
- rgbTred:=kk[ld[x2].rgbTred,tt];
- rgbTgreen:=kk[ld[x2].rgbTgreen,tt];
- rgbTblue:=kk[ld[x2].rgbTblue,tt];
- end;
- end;
- canvas.draw(0,y,lijn);
- end;
- inc(y);
- end;
- inc(py,dd);
- if py>ymax then
- begin
- if random(2)=0 then
- begin
- py:=-ymax div pp;
- dd:=2+random(4);
- end else
- dd:=-2-random(4);
- end;
- if py<-ymax div pp then
- begin
- if random(2)=0 then
- begin
- py:=ymax;
- dd:=-2-random(4);
- end else
- dd:=2+random(4);
- end;
- end;
-
- procedure Tmainscreen.FormPaint(Sender: TObject);
-
- begin
- canvas.draw(0,0,desk);
- end;
-
- procedure Tmainscreen.FormHide(Sender: TObject);
- begin
- application.OnMessage:=nil;
- timer1.enabled:=false;
- showcursor(true);
- end;
-
-
- procedure Tmainscreen.FormShow(sender: TObject);
-
- var
- tmp:tcanvas;
- i,j,tt:integer;
-
- begin
- randomize;
- xmax:=screen.width;
- ymax:=screen.height;
- width:=xmax;
- height:=ymax;
- left:=0;
- top:=0;
-
- dc:=getwindowdc(getdesktopwindow);
- tmp:=tcanvas.create;
- tmp.handle:=dc;
- desk:=tbitmap.create;
- desk.pixelformat:=pf24bit;
- desk.width:=xmax;
- desk.height:=ymax;
- desk.canvas.copyrect(rect(0,0,xmax,ymax),tmp,rect(0,0,xmax,ymax));
- dc:=getdc(0);
- tmp.free;
- lijn:=tbitmap.create;
- lijn.width:=xmax;
- lijn.height:=1;
- lijn.pixelformat:=pf24bit;
-
- GetCursorPos(crs);
- Application.OnMessage:=SAverout;
- showcursor(false);
- for tt:=-8 to 1024 do cc[tt]:=0;
- for tt:=0 to ymax div pp do
- cc[tt]:=round(xmax*-(1-cos(tt*pi*pp*2/ymax))*sin(tt*pi*pp*6/ymax)/128);
- for i:=0 to 255 do for tt:=-8 to 1024 do kk[i,tt]:=i;
- for i:=0 to 255 do for tt:=0 to ymax div 4 do
- begin
- // j:=round(i-128*((1-cos(tt*pi*pp*2/ymax))*cos((tt+ymax div 32)*pi*pp*6/ymax)/4));
- j:=round(i-96*((1-cos(tt*pi*pp*2/ymax))*sin((tt-ymax div 32)*pi*pp*6/ymax)/4));
- if j<0 then j:=0;
- if j>255 then j:=255;
- kk[i,tt]:=j;
- end;
- py:=-ymax div 6;
- dd:=3;
- end;
-
- end.
-